import Taro from '@tarojs/taro'
import { env } from './config'
import { getSessionKey, decryptData, register, getUserInfo } from '../services/user';
import { set as setGlobalData, get as getGlobalData } from './globalData';
import { fullImgUrl, timeFormat } from './utils';

function getStorage(key) {
  return Taro.getStorage({ key }).then(res => res.data).catch(() => '')
}


/**
 * 简易封装网络请求
 * @param {*} options
 */
export default async function fetch(options) {
  const { url, data, method = 'GET', showToast = true } = options
  const token = await getStorage('token')
  const header = token ? { 'Authorization': 'Bearer ' + token } : {}
  if (method === 'POST') {
    header['content-type'] = 'application/json'
  }
  return Taro.request({
    url: `${ENV.api_url}${url}`,
    method,
    data,
    header
  }).then(async (res) => {
    const { code, data } = res.data
    if (code == 400) {
      return data
    }
    if (code !== 200) {
      if (showToast && data) {
        Taro.showToast({
          title: data,
          icon: 'none'
        })
      }
      return Promise.reject(res.data)
    }

    return data
  }).catch((err) => {
    if (showToast && err) {
      Taro.showToast({
        title: err.data,
        icon: 'none'
      })
    }

    if (err.code === 598 || err.code === 505 || err.code === 506 || err.code === 504 || err.code === 503 || err.code === 502 || err.code === 501) {
      console.log('relogin')
      Taro.showLoading({
        mask: true
      })
      // Taro.getSetting({
      //   success: (res => {
      //     if (res.authSetting['scope.userInfo']) {
      //       Taro.login({
      //         success: function (res) {
      //           Taro.getUserInfo({
      //             success: function (userInfo) {
      //               // 获取session-key
      //               getSessionKey({ code: res.code }).then((keyRes) => {
      //                 // 解密
      //                 let data = {
      //                   encryptedData: userInfo.encryptedData,
      //                   iv: userInfo.iv,
      //                   key: keyRes.key
      //                 };
      //                 decryptData(data).then((decryptRes) => {
      //                   Taro.setStorageSync('openId', decryptRes.openId);
      //                   let unionId = '';
      //                   if (decryptRes.unionId) {
      //                     unionId = decryptRes.unionId;
      //                   }
      //                   // 用户登录
      //                   let data = {
      //                     type: 1,
      //                     nickname: userInfo.userInfo.nickName,
      //                     openid: decryptRes.openId,
      //                     avatar: userInfo.userInfo.avatarUrl,
      //                     unionid: unionId
      //                   };
      //                   register(data).then((res) => {
      //                     Taro.setStorageSync('isGetScopeUserInfo', 'true');
      //                     setGlobalData('token', res.token);
      //                     Taro.setStorageSync('token', res.token);
      //                     res.user.avatar = fullImgUrl(res.user.avatar);
      //                     res.user.create_time = timeFormat(res.user.create_time, 'yyyy年MM月dd日');
      //                     const { user, user_oauth: oauth } = res;
      //                     user.user_oauth = oauth;
      //                     getUserInfo({
      //                       id: user.id + ''
      //                     }).then(res => {
      //                       Taro.setStorageSync('userInfo', user);
      //                       setGlobalData('userInfo', user);
      //                       setGlobalData('initData', true);
      //                       fetch(options);
      //                       Taro.hideLoading();
      //                     })
      //                   });
      //                 });
      //               });
      //             }
      //           })
      //         }
      //       })
      //     } else {
      //       // 限制强制登录
      //       // Taro.navigateTo({
      //       //   url: '/subPackageWork/pages/login/index'
      //       // });
      //     }
      //   }, (rej) => {
      //     Taro.navigateTo({
      //       url: '/subPackageWork/pages/login/index',
      //     });
      //   }),

      // })
    }

    return Promise.reject({ ...err })
  })
}
